package com.ecommerce.user.dto;

import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

/**
 * 用户分页查询请求DTO
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserQueryRequest {

    /**
     * 页码，从1开始
     */
    @Min(value = 1, message = "页码必须大于等于1")
    private Integer pageNum = 1;

    /**
     * 每页条数
     */
    @Min(value = 1, message = "每页条数必须大于等于1")
    @Max(value = 100, message = "每页条数不能超过100")
    private Integer pageSize = 10;

    /**
     * 用户名模糊搜索
     */
    private String username;

    /**
     * 邮箱模糊搜索
     */
    private String email;

    /**
     * 手机号模糊搜索
     */
    private String phone;

    /**
     * 昵称模糊搜索
     */
    private String nickname;

    /**
     * 用户状态：0-禁用，1-启用
     */
    private Integer status;

    /**
     * 创建时间开始（格式：yyyy-MM-dd HH:mm:ss）
     */
    private String createTimeBegin;

    /**
     * 创建时间结束（格式：yyyy-MM-dd HH:mm:ss）
     */
    private String createTimeEnd;

    /**
     * 排序字段
     */
    private String orderBy = "createTime";

    /**
     * 排序方向：asc-升序，desc-降序
     */
    private String orderDirection = "desc";
    
    /**
     * 获取排序方向
     * @return 排序方向
     */
    public String getOrderDirection() {
        return orderDirection;
    }
    
    /**
     * 设置排序方向
     * @param orderDirection 排序方向
     */
    public void setOrderDirection(String orderDirection) {
        this.orderDirection = orderDirection;
    }
    
    /**
     * 获取排序字段
     * @return 排序字段
     */
    public String getOrderBy() {
        return orderBy;
    }
    
    /**
     * 设置排序字段
     * @param orderBy 排序字段
     */
    public void setOrderBy(String orderBy) {
        this.orderBy = orderBy;
    }
    
    /**
     * 获取页码
     * @return 页码
     */
    public Integer getPageNum() {
        return pageNum;
    }
    
    /**
     * 设置页码
     * @param pageNum 页码
     */
    public void setPageNum(Integer pageNum) {
        this.pageNum = pageNum;
    }
    
    /**
     * 获取每页条数
     * @return 每页条数
     */
    public Integer getPageSize() {
        return pageSize;
    }
    
    /**
     * 设置每页条数
     * @param pageSize 每页条数
     */
    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }
    
    /**
     * 获取用户名
     * @return 用户名
     */
    public String getUsername() {
        return username;
    }
    
    /**
     * 设置用户名
     * @param username 用户名
     */
    public void setUsername(String username) {
        this.username = username;
    }
    
    /**
     * 获取邮箱
     * @return 邮箱
     */
    public String getEmail() {
        return email;
    }
    
    /**
     * 设置邮箱
     * @param email 邮箱
     */
    public void setEmail(String email) {
        this.email = email;
    }
    
    /**
     * 获取手机号
     * @return 手机号
     */
    public String getPhone() {
        return phone;
    }
    
    /**
     * 设置手机号
     * @param phone 手机号
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }
    
    /**
     * 获取昵称
     * @return 昵称
     */
    public String getNickname() {
        return nickname;
    }
    
    /**
     * 设置昵称
     * @param nickname 昵称
     */
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    
    /**
     * 获取用户状态
     * @return 用户状态
     */
    public Integer getStatus() {
        return status;
    }
    
    /**
     * 设置用户状态
     * @param status 用户状态
     */
    public void setStatus(Integer status) {
        this.status = status;
    }
    
    /**
     * 获取创建时间开始
     * @return 创建时间开始
     */
    public String getCreateTimeBegin() {
        return createTimeBegin;
    }
    
    /**
     * 设置创建时间开始
     * @param createTimeBegin 创建时间开始
     */
    public void setCreateTimeBegin(String createTimeBegin) {
        this.createTimeBegin = createTimeBegin;
    }
    
    /**
     * 获取创建时间结束
     * @return 创建时间结束
     */
    public String getCreateTimeEnd() {
        return createTimeEnd;
    }
    
    /**
     * 设置创建时间结束
     * @param createTimeEnd 创建时间结束
     */
    public void setCreateTimeEnd(String createTimeEnd) {
        this.createTimeEnd = createTimeEnd;
    }
}